小编Ski*_*eak的帖子

存储过程在处理时要求输入

所以我问这个是为了看看这是否在 SQL 中是可能的。

我目前正在为一个 VB.Net 应用程序编写一些存储过程,我正在使用它与我的数据库中的数据进行交互。

我正在创建一个程序来删除一组记录,但想知道程序本身是否可以要求确认该项目将被删除。类似于消息提示或程序暂停以等待进一步输入的内容。

如果这不可行,我知道如何在 VB.Net 端管理它,我只是想在数据库本身中保留尽可能多的 SQL 和数据库内容。

sql-server delete

4
推荐指数
2
解决办法
2517
查看次数

在动态 SQL 中参数化表名

我一直在研究一些具有条件参数的存储过程,但其中一个给我带来了一个我无法弄清楚的问题。这是程序的代码:

CREATE PROCEDURE dbo.GetTableData(
    @TblName   VARCHAR(50),
    @Condition VARCHAR(MAX) = NULL,
) AS
BEGIN
    IF(EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @TblName))
        BEGIN
            DECLARE @SQL NVARCHAR(MAX) = N'
            SELECT * FROM @TblName WHERE 1=1'
            + CASE WHERE @Condition IS NOT NULL THEN
            ' AND ' + @Condition ELSE N'' END

            DECLARE @params NVARCHAR(MAX) = N'
                @TblName   VARCHAR(50),
                @Condition VARCHAR(MAX)';

            PRINT @SQL

            EXEC sys.sp_executesql @SQL, @params,
                @TblName,
                @Condition
        END
    ELSE
        RETURN 1
END
Run Code Online (Sandbox Code Playgroud)

我希望程序工作的方式是,它允许我进行快速的表查找。因此,如果我想查看 Parts 表中的所有内容,我只需运行

EXEC GetTableData 'parts'
Run Code Online (Sandbox Code Playgroud)

或者,如果我想查看零件表中的所有内容,我会运行特定的供应商

EXEC GetTableData …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures

2
推荐指数
1
解决办法
3万
查看次数

带有可选参数的存储过程

我有一个视图,它抓取了我希望能够搜索的大量数据。视图设置了以下列:

Part_Number、说明、信息、供应商、制造商、类别、子类别、货币、价格、折扣。

我希望创建一个存储过程,它可以让我在视图中搜索我专门查找的数据。就像是:

SELECT * FROM PartsData
WHERE Part_Number = '0010.05.20.20'
Run Code Online (Sandbox Code Playgroud)

现在我的第一个想法是设置过程,以便它寻找的唯一参数是 a VARCHAR,它基本上包含整个WHERE子句的内容。这听起来像是行得通的。

但是,我是否可以使用可选参数设置存储过程?我不确定这是否是您可以在 SQL 中执行的操作。

如果没有,我最初的实施想法是我最好的选择吗?因为看起来应该有更好的方法来做到这一点。:\

有时WHERE子句可能很长,例如:

WHERE Description LIKE '%cap' 
AND Supplier LIKE 'A2A Systems' 
AND Manufacturer LIKE 'Vario'
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures

1
推荐指数
2
解决办法
4965
查看次数

为列值创建条件规则

我目前正在 SQL Server 中处理下表

Table: order_status_logs
    log_id      INT NOT NULL IDENTITY(1,1)
    order_id    INT NOT NULL
    status_id   INT NOT NULL
    log_date    DATE NOT NULL
    expected_by DATE NULL
Run Code Online (Sandbox Code Playgroud)

在此status_id列的表中,可能有以下值:

[1] - Pending
[2] - Ordered
[3] - Backordered
[4] - Received
Run Code Online (Sandbox Code Playgroud)

我想设置我的表,以便在尝试创建新记录时,如果不等于 4 ,expected_by则从NULL到 。基本上除非已收到订单,否则该表将始终需要该列的数据。NOT NULLstatus_idexpected_by

可以用 a 来做到这一点CONSTRAINT吗?或者这是我需要通过返回错误消息的程序或如果我不提供该列数据的内容来执行的操作?

sql-server constraint

1
推荐指数
1
解决办法
1835
查看次数

连接表而不会丢失数据

我处于需要查询数据库中的数据的情况,但正在努力解决如何正确形成查询的问题。基本上我需要从下表中获取数据:

Table: Contact
    contact_id INT [Primary Key]
    first_name VARCHAR(50)
    last_name  VARCHAR(50)

Table: Contact_Phone
    contact_id   INT [Foreign Key/Composite Primary Key]
    phone_number VARCHAR(15) [Composite Primary Key]
    extension    VARCHAR(10), NULL

Table: Contact_Fax
    contact_id   INT [Foreign Key/Composite Primary Key]
    fax_number   VARCHAR(15) [Composite Primary Key]

Table: Contact_Email
    contact_id   INT [Foreign Key/Composite Primary Key]
    email        VARCHAR(100) [Composite Primary Key]
Run Code Online (Sandbox Code Playgroud)

现在并不是我Contacts桌子上的每个联系人都有电话、传真或电子邮件。有些人只有一部电话或传真。其他人只是一封电子邮件。我知道有一个联系人只有一个电话号码。

现在我的问题是,如果我尝试对所有这些表进行简单的查询以查找特定的联系信息,如果其中任何一个都没有条目(例如,我的一个没有传真或电子邮件的联系人) 然后我根本没有返回任何数据。

所以问题是,我如何将这个查询放在一起,以便如果我试图查找特定联系人的信息,即使其中一个发生,我仍然能够看到所有数据(电话/传真/电子邮件)是空白?

join sql-server query

0
推荐指数
1
解决办法
2058
查看次数

标签 统计

sql-server ×5

stored-procedures ×2

constraint ×1

delete ×1

join ×1

query ×1