2015-03-31 59 views
0

當我運行它告訴我:關鍵字'SELECT'附近的語法不正確。 但我需要這個傳遞給其餘腳本 值一露苗頭用於搜索 - 這是唯一的塊修改誰需要一些拋光如何使用substing返回set變量?

BEGIN 

DECLARE @ResultsTable TABLE (ColumnName nvarchar(200), ColumnValue nvarchar(100)) 

DECLARE @ColumnName nvarchar(128), 
     @SearchStr2 nvarchar(110), 
     @TableName nvarchar(256), 
     @TableName2 nvarchar(256) 

DECLARE @PolicyPrefix nvarchar(5), 
     @PolicyID nvarchar(10), 
     @PolicyEffDate date, 
     @Policy nvarchar(10), --needless , 
SET @TableName = ' ' 

SET @PolicyPrefix = SELECT SUBSTRING(Policy, 1, 5) 
        FROM [dbo].[DWXP050] 
       WHERE intcov LIKE '%epl%' --'CMPMO' ------notices it only the policy letter part from the search result 

SET @PolicyID = SELECT SUBSTRING(Policy,6,len(Policy)-5) 
       FROM [dbo].[DWXP050] 
      WHERE intcov LIKE '%epl%' ---'08929' ------notices it only the policy number part from the search result 

SET @PolicyEffDate = SELECT cast(cast(EFFDTE as varchar)as date) 
        FROM [dbo].[DWXP050] 
       WHERE intcov LIKE '%epl%' ----'2009-11-01' ------notices it has dashes from the search result 

回答

0

嘗試:

SELECT @PolicyPrefix = SUBSTRING(Policy, 1, 5) FROM [dbo].[DWXP050] WHERE intcov LIKE '%epl%' --'CMPMO' ------notices it only the policy letter part from the search result 

SELECT @PolicyID = SUBSTRING(Policy, 6) FROM [dbo].[DWXP050] WHERE intcov LIKE '%epl%'---'08929' ------notices it only the policy number part from the search result 

SELECT @PolicyEffDate = cast(cast(EFFDTE as varchar)as date) FROM [dbo].[DWXP050] WHERE intcov LIKE '%epl%' ----'2009-11-01' ------notices it has dashes from the search result 
+0

我還會添加'TOP 1',因爲它是從表中選擇的,因此返回多個值的查詢不會出錯。 – 2015-03-31 17:25:46

+0

其名稱: 必須聲明標量變量「@PolicyPrefix」。 必須聲明標量變量「@PolicyEffDate」。 必須聲明標量變量「@PolicyPrefix」。 – MrSQLDBA 2015-03-31 17:27:45

+0

是的,你需要聲明你的變量。我假設你已經完成了任何你從中得到的程序。這裏的代碼示例只是修復了您在此處發佈的代碼段。 – Jim 2015-03-31 17:28:50

0
SET @PolicyID = SELECT SUBSTRING(Policy, 6) FROM [dbo].[DWXP050] WHERE intcov LIKE '%epl%'---'08929' ------notices it only the policy number part from the search result 

您尚未在此行中爲子字符串函數添加第三個參數。它添加

+0

,因爲我希望它在第6個字符開始,直到字符串 結束看看這裏解釋。 http://www.1keydata.com/sql/sql-substring.html – MrSQLDBA 2015-03-31 19:13:52

0

把SELECT語句()喜歡 -

SET @PolicyPrefix = (SELECT SUBSTRING(Policy, 1, 5) FROM [dbo].[DWXP050] WHERE intcov LIKE '%epl%') 

和@Policy爲nvarchar(10)後你有不用(,)

+0

因爲我希望它從第6個字符開始,直到字符串 的末尾看看這裏的解釋。 http://www.1keydata.com/sql/sql-substring.html – MrSQLDBA 2015-03-31 19:13:57

+0

更新我的答案 – 2015-04-01 13:10:13

0

「/這些都是我所做的更改,這是對我有用的答案。謝謝Everyone./'

BEGIN 

    DECLARE @ResultsTable TABLE (ColumnName nvarchar(200) 
    ,        ColumnValue nvarchar(100)) 

    DECLARE @ColumnName nvarchar(128) 
    ,  @SearchStr2 nvarchar(110) 
    ,  @TableName nvarchar(256) 
    ,  @TableName2 nvarchar(256) 

    DECLARE @PolicyPrefix nvarchar(5) 
    ,  @PolicyID  nvarchar(10) 
    ,  @PolicyEffDate date 
    ,  @Policy  nvarchar(13) 

    --SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''') 

    SET @TableName = ' ' 

    --These values are used to search 

    SET @PolicyPrefix = (SELECT TOP 1 SUBSTRING(Policy, 1, 5) 
    FROM [dbo].[DWXP050] 
    WHERE intcov LIKE '%epl%') --'CMPMO' ------notices it only the policy letter part from the search result 

    SET @PolicyID = (SELECT TOP 1 SUBSTRING(Policy,6,len(Policy)-5) 
    FROM [dbo].[DWXP050] 
    WHERE intcov LIKE '%epl%')---'08929' ------notices it only the policy number part from the search result 

    SET @PolicyEffDate = (SELECT TOP 1 cast(cast(EFFDTE as varchar)as date) 
    FROM [dbo].[DWXP050] 
    WHERE intcov LIKE '%epl%') ----'2009-11-01' ------notices it has dashes from the search result 

    SET @SearchStr2 = (SELECT [SystemAssignId] 
    FROM dbo.[CoPolicyPointer] 

    WHERE [PolicyPrefixCd] = @PolicyPrefix 

     AND [PolicyId] = @PolicyID 

     AND [PolicyEffDt] = @PolicyEffDate) 

    WHILE (@TableName IS NOT NULL) 
    BEGIN 

     SET @ColumnName = QUOTENAME('SystemAssignId') 

     SET @TableName = (

     SELECT MIN(QUOTENAME(TABLE_NAME)) 

     FROM INFORMATION_SCHEMA.TABLES 

     WHERE TABLE_TYPE = 'BASE TABLE' 

      AND QUOTENAME(TABLE_NAME) > @TableName 

     ) 

     SET @TableName2 = 'dbo.' + @TableName 

     IF @ColumnName IS NOT NULL 
     BEGIN 

      INSERT INTO @ResultsTable 

      EXEC(

      'SELECT ''' + @TableName + ''', LEFT(' + @ColumnName + ', 100) 

FROM ' + @TableName2 + ' (NOLOCK) ' + 

      ' WHERE ' + @ColumnName + ' LIKE ''' + @SearchStr2 + '''' 

      ) 

     END 

    END 

    SELECT DISTINCT ColumnName 
    ,    ColumnValue 
    FROM @ResultsTable 

END